home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 February: Tool Chest / Apple Developer CD Series Tool Chest February 1996 (Apple Computer)(1996).iso / Sample Code / Snippets / Devices / Audio CD ƒ / cdMain.c < prev   
Encoding:
Text File  |  1992-07-15  |  3.3 KB  |  136 lines  |  [TEXT/MPS ]

  1. // imWare
  2. // Wednesday, February 14, 1990
  3. // James Beninghaus
  4.  
  5. #include    <stdio.h>
  6. #include    <string.h>
  7. #include    <ToolUtils.h>
  8. #include    <Errors.h>
  9. #include    <cd.h>
  10.  
  11. #define sUNDEF            0
  12. #define    sDRIVE            1
  13. #define    sPLAY            2
  14. #define    sPAUSE            3
  15. #define    sCONTINUE        4
  16. #define    sSTOP            5
  17. #define    sEJECT            6
  18.  
  19. #define    min(a, b)        (a<b ? a:b)
  20. #define    max(a, b)        (a>b ? a:b)
  21.  
  22. void Usage() {
  23.     printf("cd [-drive 1..6] [-play [1..73 [1..73]] [stereo | mono] | -pause | -continue | -stop | -eject]\n");
  24.     exit(paramErr);
  25. }
  26.  
  27. main (int argc, char *argv[]) {
  28.     
  29.     auto    OSErr    osErr;
  30.     auto    short    drive,
  31.                     ioRefNum,
  32.                     count,
  33.                     track,
  34.                     state;
  35.     auto    Byte    userCDNumber,
  36.                     userStart, 
  37.                     userStop,
  38.                     discStart,
  39.                     discStop,
  40.                     audioStatus,
  41.                     playMode,
  42.                     cntlField,
  43.                     minutes,
  44.                     seconds,
  45.                     frames;
  46.     auto    Boolean    discInPlace;
  47.     
  48.     InitGraf((Ptr) &qd.thePort);
  49.     
  50.     state            = sUNDEF;
  51.     userCDNumber    = 1;
  52.     userStart        = 0;
  53.     userStop        = 100;
  54.     playMode        = STEREO;
  55.     
  56.     count = 0;
  57.     while (++count < argc)
  58.         if (0 == strcmp("-drive", argv[count]))
  59.             state = sDRIVE;
  60.         else if (1 == sscanf(argv[count], "%hd", &drive) && 1 <= drive && drive <= 6 && sDRIVE == state) {
  61.             state = sUNDEF;
  62.             userCDNumber = (Byte) drive;
  63.         } else if (0 == strcmp("-play", argv[count]) && sUNDEF == state)
  64.             state = sPLAY;
  65.         else if (1 == sscanf(argv[count], "%hd", &track) && 1 <= track && track <= 73 && sPLAY == state)    
  66.             if (0 == userStart)
  67.                 userStart = (Byte) track;
  68.             else
  69.                 userStop = (Byte) track;
  70.         else if (0 == strcmp("stereo", argv[count]) && sPLAY == state)
  71.             playMode = STEREO;
  72.         else if (0 == strcmp("mono", argv[count]) && sPLAY == state)
  73.             playMode = MONO;
  74.         else if (0 == strcmp("-pause", argv[count]) && sUNDEF == state)
  75.             state = sPAUSE;
  76.         else if (0 == strcmp("-continue", argv[count]) && sUNDEF == state)
  77.             state = sCONTINUE;
  78.         else if (0 == strcmp("-stop", argv[count]) && sUNDEF == state)
  79.             state = sSTOP;
  80.         else if (0 == strcmp("-eject", argv[count]) && sUNDEF == state)
  81.             state = sEJECT;
  82.         else
  83.             Usage();
  84.  
  85.     osErr = OpenCD(userCDNumber, &ioRefNum);
  86.     if (noErr == osErr)
  87.         osErr = DiscStatus(ioRefNum, &discInPlace);
  88.         if (noErr == osErr) {
  89.             if (discInPlace) {
  90.                 switch (state) {
  91.                     case sUNDEF :
  92.                     case sDRIVE :
  93.                     case sPLAY :
  94.                         osErr = TrackCount(ioRefNum, &discStop);
  95.                         if (noErr == osErr) {
  96.                             discStart = 0; 
  97.                             do 
  98.                                 osErr = TrackInfo(ioRefNum, ++discStart, &cntlField, &minutes, &seconds, &frames);
  99.                             while (BitTst(&cntlField, 5) && noErr == osErr); 
  100.                             if (noErr == osErr) {
  101.                                 osErr = AStop(ioRefNum, max(min(userStop, discStop), discStart));
  102.                                 if (noErr == osErr) 
  103.                                     osErr = APlay(ioRefNum, min(max(userStart, discStart), discStop), playMode);
  104.                             }
  105.                         }
  106.                         break;
  107.                     case sPAUSE :
  108.                         osErr = AStatus(ioRefNum, &audioStatus, &playMode, &cntlField, &minutes, &seconds, &frames);
  109.                         if (noErr == osErr)
  110.                             if (PLAYING == audioStatus)
  111.                                 osErr = APause(ioRefNum, PAUSE);
  112.                         break;
  113.                     case sCONTINUE :
  114.                         osErr = AStatus(ioRefNum, &audioStatus, &playMode, &cntlField, &minutes, &seconds, &frames);
  115.                         if (noErr == osErr)
  116.                             if (PAUSED == audioStatus) 
  117.                                 osErr = APause(ioRefNum, CONTINUE);
  118.                         break;
  119.                     case sSTOP :
  120.                         osErr = AStop(ioRefNum, 0);
  121.                         break;
  122.                     case sEJECT :
  123.                         osErr = EjectCD(ioRefNum);
  124.                         break;
  125.                 }
  126.             }
  127.         }
  128.     exit(osErr);
  129. }
  130.  
  131.     
  132.     
  133.  
  134.     
  135.         
  136.